package com.ddm.service.webService;

import cn.hutool.db.PageResult;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ddm.entity.webEntity.UserSubscribe;
import com.ddm.vo.webVo.SubscribeDetailVO;

import java.util.List;
import java.util.Map;

/**
 * 用户订阅服务接口
 */
public interface UserSubscribeService extends IService<UserSubscribe> {
    // 查询用户的订阅详情
    List<SubscribeDetailVO> getUserSubscribeDetail(Long userId);

    // 查询即将到期的订阅
    List<SubscribeDetailVO> getExpiringSubscribes(Integer days);

    // 检查用户是否有有效订阅
    Map hasValidSubscribe(Long userId);

    boolean addSubscribe(Long userId, Long planId);

    /**
     * 修改订阅状态和自动续费情况
     * @param subId 订阅记录ID
     * @param status 订单状态（可为null，不修改）
     * @param autoRenew 自动订阅情况（可为null，不修改）
     * @return 是否修改成功
     */
    boolean updateSubscribeStatus(Long subId, Integer status, Integer autoRenew);

    /**
     * 查询订阅记录列表
     * @param userId 用户ID（可选）
     * @param status 订单状态（可选）
     * @param autoRenew 自动订阅情况（可选）
     * @param page 页码
     * @param pageSize 每页条数
     * @return 分页结果
     */
    PageResult<SubscribeDetailVO> getSubscribeList(Long userId, Integer status, Integer autoRenew, Integer page, Integer pageSize);

    /**
     * 根据 userId 和 planId 查询 subId
     * @param userId 用户ID
     * @param planId 套餐ID
     * @return 订阅记录ID（subId）
     */
    Long getSubIdByUserAndSubscription(Integer userId, Integer planId);

    List<SubscribeDetailVO> selectExpiringSubscribesByParams(Map<String, Object> params);
}